package sinfoci.alquimiabtl.notificaciones.conexion;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;

import sinfoci.alquimiabtl.http.HttpRequest;
import sinfoci.alquimiabtl.notificaciones.utilities.Constantes;

/**
 * Esta es la clase encargada de las cosultas a la base de datos
 * 
 * @author Bryan Camilo Perez Trujillo <br>
 *         AlquimiaBTL - SINFOCI
 * 
 */
public class ConsultasBD {

	/**
	 * Este metodo permite obtener el id del dispositivo android
	 * 
	 * @param idAndroid
	 * @return el id del dispositivo android o null si no fue posible consultar
	 *         el id
	 */
	public static JSONArray consultarIdAndroid(String idAndroid) {
		Map<String, String> form = new HashMap<String, String>();

		form.put("idAndroid", idAndroid);

		HttpRequest httpRequest = HttpRequest
				.post(Constantes.CONSULTA_BUSCAR_USUARIO).form(form)
				.connectTimeout(4000).readTimeout(4000);

		String respuesta = httpRequest.body();

		try {
			JSONArray jsonObject = new JSONArray(respuesta);

			if (jsonObject != null && jsonObject.length() > 0) {
				return jsonObject;
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * Este metodo se encarga de consultar las notificaciones dependiendo de la
	 * ciudad
	 * 
	 * @param idCiudad
	 * @return un json Array de notificacion o null si no fue posible hacer la
	 *         consulta
	 */
	public static JSONArray consultarNotificacionesPorCiudad(Integer idCiudad) {
		Map<String, String> form = new HashMap<String, String>();

		form.put("idCiudad", idCiudad.toString());

		HttpRequest httpRequest = HttpRequest
				.post(Constantes.CONSULTA_BUSCAR_NOTIFICACION_POR_CIUDAD)
				.form(form).connectTimeout(4000).readTimeout(4000);

		try {
			String respuesta = httpRequest.body();
			if (respuesta != null && !respuesta.equals("")) {

				JSONArray jsonObject = new JSONArray(respuesta);

				if (jsonObject != null && jsonObject.length() > 0) {
					return jsonObject;
				}
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * Este metodo permite consultar las ciudades
	 * 
	 * @return JsonArray con las ciudades
	 * 
	 */
	public static JSONArray consultarCiudades() {

		HttpRequest httpRequest = HttpRequest
				.post(Constantes.CONSULTA_BUSCAR_CIUDADES).connectTimeout(6000)
				.readTimeout(6000);

		try {
			String respuesta = httpRequest.body();
			if (respuesta != null && !respuesta.equals("")) {

				JSONArray jsonObject = new JSONArray(respuesta);

				if (jsonObject != null && jsonObject.length() > 0) {
					return jsonObject;
				}
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * Este metodo permite actualizar los datos de un usuario registrado
	 * 
	 * @param idUsuario
	 *            : id del dispositivo android
	 * @param nombreUser
	 *            : nombre del usuario a cambiar
	 * @param correo
	 *            : correo del usuario a cambiar
	 * @param idCiudad
	 *            id de la ciudad del usuario a cambiar
	 * @return True: si fue posible actualizar los datos, False: si no fue
	 *         posible actualizar los datos del usuario
	 */
	public static boolean actualizarUsuario(String idUsuario,
			String nombreUser, String correo, Integer idCiudad) {
		Map<String, String> form = new HashMap<String, String>();

		form.put("nombre", nombreUser);
		form.put("correo", correo);
		form.put("ciudad", idCiudad.toString());
		form.put("idusuario", idUsuario);

		HttpRequest httpRequest = HttpRequest
				.post(Constantes.ACTUALIZAR_USUARIO).form(form)
				.connectTimeout(4000).readTimeout(4000);

		String respuesta = httpRequest.body();

		if (respuesta != null && respuesta.equals(Constantes.EXITO)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * Este metodo permite insertar un nuevo usuario en la base de datos
	 * 
	 * @param nombreUser
	 *            : el nombre del usuario a insertar
	 * @param correo
	 *            : el correo del usuario a insertar
	 * @param sexo
	 *            : el sexo del usuario a insertar
	 * @param idCiudad
	 *            : el id de la ciudad del usuario a insertar
	 * @param idAndroid
	 *            : el id del dispositivo android del usuario a insertar
	 * @return: True si fue posible insertar el usuario, False si no fue posible
	 *          insertar
	 */
	public static boolean insertarUsuario(String nombreUser, String correo,
			String sexo, Integer idCiudad, String idAndroid) {
		Map<String, String> form = new HashMap<String, String>();

		form.put("nombre", nombreUser);
		form.put("correo", correo);
		form.put("sexo", sexo);
		form.put("ciudad", idCiudad.toString());
		form.put("idAndroid", idAndroid);

		HttpRequest httpRequest = HttpRequest.post(Constantes.INSERTAR_USUARIO)
				.form(form).connectTimeout(4000).readTimeout(4000);

		String respuesta = httpRequest.body();

		if (respuesta != null && respuesta.equals(Constantes.EXITO)) {
			return true;
		}

		else
			return false;
	}

}
